package ar.com.bdf.ipharma.protocolo.model;

import org.apache.commons.lang.StringUtils;

import ar.com.bdf.ipharma.protocolo.model.utils.ConverterUtil;


public class FactoryHandShake {

	public HandShake getNodoDesconocido(Integer nroSerie, DataTrama dataTrama){
		DataTrama dataTramaDesc = new DataTrama(null);
		
		String identificadorString = ConverterUtil.convertToHexa(dataTrama.getIdentificador());
		String nroSerieHexa = StringUtils.leftPad(ConverterUtil.convertToHexa(nroSerie), 4, '0');
		
		Trama req = new Trama(dataTramaDesc, Comando.NODO_DESCONOCIDO, nroSerieHexa + identificadorString);
		Trama resp = new Trama(dataTramaDesc, Comando.NODO_DESCONOCIDO, ".{4}" + nroSerieHexa);
		
		return new HandShake(req, resp);
	}

	public HandShake getIdentificacionNodo(DataTrama dataTrama) {
		Trama req = new Trama(dataTrama, Comando.PEDIDO_NODO, "");
		Trama resp = new Trama(dataTrama, Comando.PEDIDO_NODO, ".{8}");
		
		return new HandShake(req, resp);
	}

	public HandShake getExpulsion(DataTrama dataTrama, Integer nivel, Integer posicionRulo, Integer cantVueltas) {
		String nivelHexa = ConverterUtil.convertToHexa(nivel);
		String posicionHexa = ConverterUtil.convertToHexa(posicionRulo);
		String cantVueltasHexa = ConverterUtil.convertToHexa(cantVueltas);
		
		Trama req = new Trama(dataTrama, Comando.EXPULSION_MEDICAMENTO, nivelHexa + posicionHexa + cantVueltasHexa);
		Trama respOk = new Trama(dataTrama, Comando.OK, ""); 
		Trama respFail = new Trama(dataTrama, Comando.FAILURE, "");
		
		return new HandShake(req, respOk, respFail);
	}

	public HandShake getApertura(DataTrama dataTrama, Integer i) {
		String hexa = ConverterUtil.convertToHexa(i);
		
		Trama req = new Trama(dataTrama, Comando.EXTRACCION_MEDICAMENTO, hexa);
		Trama respOk = new Trama(dataTrama, Comando.OK, ""); 
		Trama respFail = new Trama(dataTrama, Comando.FAILURE, "");
		
		return new HandShake(req, respOk, respFail);
	}

}
